PX 인기상품의 변화 살펴보기!

안녕하세요.
PX 데이터 분석 마지막 시간입니다.

1편 스토리
2편 스토리

두 편을 다 보고 여기까지 오셨다면!

이제는 마치 PX병이 된 기분을 느끼실 수 있습니다!

거두절미하고 목차부터 볼까요~


목차

단어 정의 및 데이터 명세

서론

본론

전체상품
여름 음료 변화

결론


그럼 목차의 순서대로 단어 정의와 데이터에 대한 설명이 있겠습니다!

단어 정의

데이터명세

제공: 국방부

기간 : 2015년 4월 부터 2021년 2월까지의 데이터

간단 데이터 설명 : 2015년 4월 부터 2021년 2월 까지 px에서 수량기준으로 했을 때 월별 인기 상품 10개와 금액기준으로 했을 때 월별 인기 상품 10

ex) 2016년 3월 수량기준 인기상품 = 2016년 3월 한달을 기준으로 px에서 판매 수량이 높은 상품 10개
ex) 2016년 3월 금액기준 인기상품 = 2016년 3월 한달을 기준으로 px에서 판매 금액이 높은 상품 10개


서론

어떻게 분석할것인가?

어떤 데이터를 사용할 것인가?


데이터 전처리 과정

먼저 국방부 제공 데이터에 숫자로 되어있는 판매년도와 판매월의 형식을 datetime함수를 사용하기 위해 str형식으로 바꿔줍니다.

추가 적으로 일자 데이터가 없기 때문에 해당 월의 마지막 날로 지정해서 time 열을 만들었습니다.

df = df.astype({'판매년도':'str','판매월':'str'}) # 판매년도 값과 판매월 값을 datetime 함수 사용을 위해 문자열로 변환
df['time'] = df[['판매년도','판매월']].agg('/'.join, axis=1) # 2015/2 형식으로 붙여서 새로운 열 생성
df['time'] = pd.to_datetime(df['time'],format="%Y/%m",) # 생성한 열을 datetime 형식으로 변경
df['time'] = pd.to_datetime(df['time']) + pd.offsets.MonthEnd() # 일자 추가

화장품, 주류, 담배 등 다양한 상품이 있지만 음료수만 따로 추출했습니다.

음료수 데이터 중에서 수량 기준 데이터만 따로 뽑아 df_drink 데이터 프레임을 만들었습니다.

# 음료데이터만 추출
df_drink = df[(df['상품명']=='박카스에이캔') | (df['상품명']=='칠성사이다캔') | (df['상품명']=='코카콜라250ml') | (df['상품명']=='코카콜라') 
   | (df['상품명']=='포카리캔') | (df['상품명']=='조지아맥스') | (df['상품명']=='초코에몽') 
   | (df['상품명']=='코코팜화이트요구르트') | (df['상품명']=='코카콜라1.5L') | (df['상품명']=='환타오렌지') 
   | (df['상품명']=='코카콜라600ml') | (df['상품명']=='스프라이트') | (df['상품명']=='암바사캔') 
   | (df['상품명']=='포카리스웨트분말') | (df['상품명']=='파워에이드마운틴블라스트') | (df['상품명']=='딸기꿀단지') 
   | (df['상품명']=='몬스터에너지울트라') | (df['상품명']=='오로나민C')]
# 수량기준 추출
df_drink = df_drink[df_drink['선정기준']=='수량']

전체 상품이 있는 df와 데이터와 수량기준 음료수 데이터만 있는 df_drink을

상품명을 기준으로 누적 횟수를 세고 time 열을 인덱스로 하고 상품명을 열 이름, 누적 횟수를 값으로 가지는 데이터 프레임을 생성했습니다.

# 전체
df['cumcount'] =  df.groupby('상품명').cumcount()+1 # 상품명 나온 수만큼 누적 카운트 횟수 추가
df = df.pivot_table(values='cumcount', index='time', columns='상품명',aggfunc='first') # 누적 카운트 횟수를 값으로 하고 상품명을 열로 가지는 새로운 데이터프레임 생성
df.iloc[0] = df.iloc[0].fillna(0) # 첫번째 행에서 NaN값을 0으로 채우기
df = df.fillna(method='pad')

#음료&수량
df_drink.set_index('time',inplace=True) #시간을 기준으로 인덱스 생성
df_drink = df_drink[(df_drink.index.month == 6) | (df_drink.index.month == 7) | (df_drink.index.month == 8)] # 6월7월8월 데이터 추출
df_drink['cumcount'] = df_drink.groupby('상품명').cumcount()+1 # 상품명 나온 수만큼 누적 카운트 횟수 추가
df_drink = df_drink.pivot_table(values='cumcount',index='time',columns='상품명',aggfunc='first')
df_drink.iloc[0] = df_drink.iloc[0].fillna(0) # 첫번째 행에서 NaN값을 0으로 채우기
df_drink = df_drink.fillna(method='pad') # 나머지 결측값 이전 행 값으로 채우기

본론

전체상품

선정기준에 관계 없이 데이터에 제공된 총 기간 동안 인기상품에 어떠한 변화가 있는지 알아보겠습니다.

변화가 많이 없는걸로 보아, 과거부터 현재까지 꾸준히 인기있는 상품이 계속해서 인기 상품에 오르는걸 볼 수 있었습니다.

또한, 코카콜라와 칠성사이다가 꾸준히 많이 팔리고 있습니다.

포카리캔은 2019년 부터 주춤 하는군요.

그렇다면 년별로 6월, 7월, 8월에의 음료수 판매와 비교해볼까요?

여름 음료 변화

상위 3개의 음료수는 매년 여름마다 꾸준히 팔리고 있습니다.

bar race chart가 아닌 누적 횟수를 나타낸 꺾은선 그래프를 보시죠.

해당 그래프의 범례 부분을 클릭하여 보면 칠성사이다는 2015년에서 2021년까지 여름에만 17번 인기상품 목록에 올랐습니다.

그런데! 자세히보면 코카콜라는 코카콜라 250ml와 코카콜라라는 항목으로 구분 되어있군요.

이 두 데이터를 합친다면 18번으로 칠성사이다 캔보다 1회 더 많은 횟수입니다.

그럼 누적 횟수 그래프의 기울기를 가지고 데이터를 해석해 보겠습니다!

환타 오렌지는 2015년 여름에만 인기 상품에 오르고 그 이후에는 누적 횟수가 유지 되는걸 보니 인기가 사그라 들었네요.

몬스터에너지울트라는 2020년 여름 부터 인기 상품에 오르는 회수가 누적되기 시작했습니다.

그런데! 코카콜라와 코카콜라250ml만 놓고 보았을때 코카콜라250ml이 인기상품에 오르지 않자 코카콜라가 인기상품으로 오르고 있습니다.

아! 데이터 입력을 통일 시켰나봅니다!

시간 순서대로 나열해 보겠습니다.

해당 그래프는 x축에 시간을 나타내었습니다.

이 그래프를 봤을 때 코카콜라250ml 데이터가 코카콜라로 통합됐다고 유추 할 수 있었습니다.

코카콜라는 매년 여름마다 인기상품 순위에 올랐고

칠성사이다캔은 2019년 6월을 제외하고 코카콜라와 같이 매년 여름마다 인기상품 순위에 올랐습니다.

해당 그래프를 보고 인기 음료수 흐름 변화를 쉽게 알아 볼 수 있었습니다!!

결론

분석한계

이 데이터가 군 장병들만을 대상으로 한 데이터가 아닌

국군마트 PX에서 판매된 데이터로 하다보니 군인 가족, 장교, 부사관 등 여러 집단이 포함되었습니다.

그렇기 때문에 군 장병들에게 인기있는 상품이라고 하지않고 PX에서 인기있는 상품으로 정의를 내렸습니다.

결과요약

사실 이 데이터에 있는 모든 상품들이 인기상품으로 PX에서 잘 팔리는 것들입니다.

그와중에도 꾸준히 인기있는 상품으로는 코카콜라, 칠성사이다, 포카리스웨트 등이 있었습니다.

여러분들은 여름에 어떤 음료수를 많이 드시나요? 데이터를 통해 맞춰보자면

역시 칠성사이다 또는 코카콜라이신가요?

지금까지 신나는 데이터 분석이었습니다.